 --************************************************************************++
 --*****************                          ********************************
 --*****************   PRIMA PARTE            *********************************
 --*****************                          ****************************++
 --****************** *****************************************************++ 
select h.*,'' voce from (
select OPZIONE,DESCRIZIONE,ANNO,SUM (VAL*COEF_ANNO) VAL_T from  asm_contabile_3 

WHERE COMPONENTE = 'ALL' 
AND (OPZIONE = 'IPBT' OR (OPZIONE = 'DO' AND DESCRIZIONE <> 'DIS BT' and descrizione <> 'PCV_DISP'))
GROUP BY OPZIONE,DESCRIZIONE,ANNO

union all


select OPZIONE,DESCRIZIONE,ANNO,SUM (VAL*COEF_ANNO) VAL_T 
from  asm_contabile_3 

WHERE 
 descrizione = 'PCV_DISP' 
group by OPZIONE,DESCRIZIONE,ANNO
 union all


select OPZIONE,DESCRIZIONE,ANNO, SUM (VAL*COEF_ANNO) VAL_T from  asm_contabile_3 

WHERE DESCRIZIONE IN('MISURA USO DIVERSO','PVC_DISP','TRASMISSIONE USO DIVERSO','VENDITA')

GROUP BY OPZIONE,DESCRIZIONE,ANNO

UNION ALL




------ DO_DIS BT   DO_DISB T      DO_DISB T     DO_DIS BT      DO_DIS BT

SELECT A.OPZIONE,'DIS BT',A.ANNO,
 
 B.VAL*B.COEF -A.VAL VAL_T
 
 FROM

(
select OPZIONE,'' DESCRIZIONE,ANNO,SUM (VAL*COEF_ANNO) VAL from  asm_contabile_3 
WHERE COMPONENTE = 'ALL' 
AND OPZIONE = 'DO' 
AND DESCRIZIONE <>  'DIS BT'
GROUP BY OPZIONE,ANNO) A,


( SELECT CO.OPZIONE,CO.ANNO,SUM(VAL) VAL,MAX(COEF_ANNO) COEF FROM ASM_CONTABILE_3 CO
 WHERE  CO.OPZIONE ='DO'
 AND  ((CO.COMPONENTE = 'ENERGIA NETTA T3' AND  VOCE = '010')
      OR (CO.COMPONENTE = 'ENERGIA NETTA T2' AND  VOCE = '110')
      OR (CO.COMPONENTE = 'QUOTA CLIENTE NETTA' AND  VOCE = '120'))
 GROUP BY CO.OPZIONE,CO.ANNO) B
 
 WHERE A.ANNO=B.ANNO UNION ALL
 


---------dis bt   dis mt  diversi

-----BT   BT   BT   BT   BT   BT   BT   -----------
 
 SELECT A.OPZIONE,A.DESCRIZIONE,A.ANNO,
 
 CASE WHEN C.VAL <> 0 THEN (A.VAL*(B.VAL/C.VAL))*A.COEF ELSE 0 END VAL_T

 
 FROM 
 
( SELECT CO.OPZIONE,CO.DESCRIZIONE,CO.ANNO,SUM(VAL) VAL,MAX(COEF_ANNO) COEF FROM ASM_CONTABILE_3 CO
 WHERE  CO.OPZIONE ='BT'
 AND  ((CO.COMPONENTE = 'ENERGIA NETTA A3' AND  VOCE = '010')
      OR (CO.COMPONENTE = 'ENERGIA NETTA T2' AND  VOCE = '110')
      OR (CO.COMPONENTE = 'QUOTA CLIENTE NETTA' AND  VOCE = '120'))
 GROUP BY CO.OPZIONE,CO.DESCRIZIONE,CO.ANNO) A,
 
 
 ( SELECT CO.OPZIONE,CO.DESCRIZIONE,CO.ANNO,SUM(VAL) VAL FROM ASM_CONTABILE_3 CO
 WHERE  CO.OPZIONE ='BT'
 AND  CO.COMPONENTE = 'ALL'
 AND  voce= case when descrizione = 'DIS BT' or descrizione = 'COT' then '120' else '010' end 
 GROUP BY CO.OPZIONE,CO.DESCRIZIONE,CO.ANNO) B,
 
 

 
 
(   SELECT CO.OPZIONE,CO.DESCRIZIONE,CO.ANNO,SUM(VAL) VAL FROM ASM_CONTABILE_3 CO
 WHERE  CO.OPZIONE ='BT'
 AND  CO.COMPONENTE = 'ALL'
 AND  (VOCE = '010' OR VOCE = '120')
 GROUP BY CO.OPZIONE,CO.DESCRIZIONE,CO.ANNO) C
 WHERE A.DESCRIZIONE = B.DESCRIZIONE
 AND   A.DESCRIZIONE=  C.DESCRIZIONE
 AND A.ANNO=B.ANNO
 AND A.ANNO = C.ANNO 
 UNION ALL
 
 
 --- MT   MT   MT   MT   MT   MT   MT   MT
  
 SELECT A.OPZIONE,A.DESCRIZIONE,A.ANNO,
 CASE WHEN C.VAL <> 0 THEN (A.VAL*(B.VAL/C.VAL))*A.COEF ELSE 0 END VAL_T
 
 FROM 
 
( SELECT CO.OPZIONE,CO.DESCRIZIONE,CO.ANNO,SUM(VAL) VAL,MAX(COEF_ANNO) COEF FROM ASM_CONTABILE_3 CO
 WHERE  CO.OPZIONE ='MT'
 AND  ((CO.COMPONENTE = 'ENERGIA NETTA A3' AND  VOCE = '010')
      OR (CO.COMPONENTE = 'ENERGIA NETTA T2' AND  VOCE = '110')
      OR (CO.COMPONENTE = 'QUOTA CLIENTE NETTA' AND  VOCE = '120'))
 GROUP BY CO.OPZIONE,CO.DESCRIZIONE,CO.ANNO) A,
 
 
 ( SELECT CO.OPZIONE,CO.DESCRIZIONE,CO.ANNO,SUM(VAL) VAL FROM ASM_CONTABILE_3 CO
 WHERE  CO.OPZIONE ='MT'
 AND  CO.COMPONENTE = 'ALL'
 AND  voce= case when descrizione = 'DIS MT' or descrizione = 'COT' then '120' else '010' end 
 GROUP BY CO.OPZIONE,CO.DESCRIZIONE,CO.ANNO) B,
 
 
(   SELECT CO.OPZIONE,CO.DESCRIZIONE,CO.ANNO,SUM(VAL) VAL FROM ASM_CONTABILE_3 CO
 WHERE  CO.OPZIONE ='MT'
 AND  CO.COMPONENTE = 'ALL'
 AND  (VOCE = '010' OR VOCE = '120')
 GROUP BY CO.OPZIONE,CO.DESCRIZIONE,CO.ANNO) C
 WHERE A.DESCRIZIONE = B.DESCRIZIONE
 AND   A.DESCRIZIONE=  C.DESCRIZIONE
 AND A.ANNO=B.ANNO
 AND A.ANNO = C.ANNO 
)H 





union
 
 
 
 --************************************************************************++
 --*****************                          ********************************
 --*****************   SECONDA PARTE         *********************************
 --*****************                          ****************************++
 --****************** *****************************************************++ 
 
 ------ COMPONENTI  A UC MCT 
 
select opzione,'COMPONENTI A UC MCT' DESCRIZIONE, anno, sum(quantita_scaglione*tariffa_componente) val_t,progressivo_voce
 FROM asm_contabile_2

WHERE 

progressivo_voce in( '010', '110','120')
and (descrizione_componente like 'A%' 
   or descrizione_componente like 'MCT%'
   or descrizione_componente like 'UC%'
   or descrizione_componente like 'PPE%'
   )
   

GROUP BY 
OPZIONE,anno,progressivo_voce

UNION ALL
-- IMPORTO FATTURATO ALTRE VOCI -- IMPORTO FATTURATO ALTRE VOCI -- IMPORTO FATTURATO ALTRE VOCI -- IMPORTO FATTURATO ALTRE VOCI 

SELECT C1.OPZIONE,'IMPORTO FATTURATO X VOCE' DESCRIZIONE,'' anno, SUM(CRV.IMPONIBILE_IVA) VAL_t,TO_CHAR(CRV.CODICE_VOCE)
 FROM COMPETENZE_RIEPILOGO_VOCI CRV,
(SELECT DISTINCT CODICE_BOLLETTA,OPZIONE FROM ASM_CONTABILE_1) C1

WHERE CRV.CODICE_COMPETENZA = C1.CODICE_BOLLETTA
AND CRV.CODICE_GESTIONE = 'ASM'
AND CRV.CODICE_ORIGINE_COMPETENZA = 'B'
and crv.CODICE_VOCE <> '010'
and crv.CODICE_VOCE <> '110'
and crv.CODICE_VOCE <> '120'

GROUP BY 
C1.OPZIONE,CRV.CODICE_VOCE
